package done.easy_501_600;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * 575. Distribute Candies 分糖果
 * <p>
 * 给定一个偶数长度的数组，其中不同的数字代表着不同种类的糖果，
 * 每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一
 * 个妹妹。返回妹妹可以获得的最大糖果的种类数。
 * <p>
 * 示例 1:
 * 输入: candies = [1,1,2,2,3,3]
 * 输出: 3
 * 解析: 一共有三种种类的糖果，每一种都有两个。
 * 最优分配方案：妹妹获得[1,2,3],弟弟也获得[1,2,3]。这
 * 样使妹妹获得糖果的种类数最多。
 * <p>
 * 示例 2 :
 * 输入: candies = [1,1,2,3]
 * 输出: 2
 * 解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1]，妹妹有两种不同
 * 的糖果，弟弟只有一种。这样使得妹妹可以获得的糖果种类数
 * 最多。
 * <p>
 * 注意:
 * 数组的长度为[2, 10,000]，并且确定为偶数。
 * 数组中数字的大小在范围[-100,000, 100,000]内。
 * <p>
 * 分析：
 * 这道题给我们一堆糖，每种糖的个数不定，分给两个人，让我们求其
 * 中一个人能拿到的最大的糖的种类数。那么我们想，如果总共有n个糖，
 * 平均分给两个人，每人得到n/2块糖，那么能拿到的最大的糖的种类数
 * 也就是n／2种，不可能再多，只可能再少。那么我们要做的就是统计出
 * 总共的糖的种类数，如果糖的种类数小于n/2，说明拿不到n/2种糖，最
 * 多能拿到的种类数数就是当前糖的总种类数，明白了这点就很容易了，
 * 我们利用集合set的自动去重复特性来求出糖的种类数，然后跟n/2比较
 * ，取二者之中的较小值返回即可
 *
 * @author 大硕
 * 2019-03-30 7:52 PM
 **/
@Slf4j
public class DistributeCandies {

    @SuppressWarnings("all")
    public int distributeCandies(int[] candies) {
        // 190330 first
        return -1;
    }

    @Test
    public void test() {
        log.info("{}", distributeCandies(new int[]{1, 1, 2, 2, 3, 3}));
    }
}





























/*
public int distributeCandies(int[] candies) {
    if(candies == null || candies.length<=0) {
        return 0;
    }

    int len = candies.length;
    HashSet<Integer> set = new HashSet<>();
    for (int i=0; i<len; i++) {
        set.add(candies[i]);
    }

    if (len/2 >= set.size()) {
        return set.size();
    }
    return len/2;
}
*/
